<?php

class BPlugin_database extends BPlugin
{

    /**
     * 设置SQL取值的偏移量
     *
     * @access public
     * @param integer $pager 每页显示数据量
     * @param integer $page 当前页数
     * @param integer $count 总数据量
     * @return integer
     */
    function offset($pager, $page, $count = 0, &$maxpage)
    {
        if ($count) {
            $maxpage = ceil($count/$pager);
            $page > $maxpage && $page = $maxpage;
        }
        return $pager * ($page > 0 ? $page - 1 : 0);
    }

    /**
     * 格式化ID参数值
     *
     * @access public
     * @param string  $col
     * @param mixed   $value
     * @param boolean $intval 是否强制转换为整型值
     * @param boolean $filter 是否过滤数组
     * @param boolean $and 是否反取
     * @return object
     */
    function quoteId($col, $value, $intval = true, $filter = true, $and = true)
    {
        if (is_array($value)) {
            $value = array_map($intval ? 'intval' : 'trim', $value);
            $filter && $value = array_filter($value);
            count($value) == 1 && $value = current($value);
        }
        if (is_scalar($value) && $intval) {
            $value = intval($value);
        }
        $expr = $col. (is_array($value) ? (($and ? '' : ' NOT'). ' IN(?)') : (($and ? '' : '!'). '=?'));
        if ($value === 'NULL') {
            $expr = str_replace(array('!=', '='), array(' IS NOT ', ' IS '), $expr);
        }
       
        return str_replace('?', $this->quote($value), $expr);
       
    }

    /**
     * 为变量添加引号
     *
     * @access public
     * @param mixed $value
     * @return mixed
     */
    function quote($value)
    {
        if (is_array($value)) {
            foreach ($value as $key=> $val) { $value[$key] = $this->quote($val); }
            return implode(',', $value);
        } elseif (is_int($value) || is_float($value) || is_object($value) || $value == 'NULL') {
            return $value;
        } else {
            return "'" . addcslashes($value, "\000\n\r\\'\"\032") . "'";
        }
    }

}

abstract class BPlugin_database_
{

    /**
     * 为变量添加引号
     *
     * @access public
     * @param mixed $value
     * @return mixed
     */
    protected function quote($value)
    {
        return B::i()->plugin->database->quote($value);
    }

    /**
     * 格式化表达式
     *
     * @access protected
     * @param mixed $val
     * @return string
     */
    protected function quoteInto($col, $value)
    {
        return str_replace('?', $this->quote($value), $col);
    }

    /**
     * 格式化数据库字段名
     *
     * @access protected
     * @param string $col
     * @return string
     */
    protected function wrap($col)
    {
        return $col;
    }

}

?>